﻿#region Código Gerado Pela Fábrica de Software (Using)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using itau.im.entidade;
using itau.im.dado;
using System.Collections;
using EnterpriseLibraryWrapper;
#endregion

#region Código Gerado Pela Fábrica de Software (Namespace)
namespace itau.im.negocio
{
    #region Código Gerado Pela Fábrica de Software (Classe)
    
    public class RegraAtribuicaoBS : IRegraAtribuicaoBS
    {
        #region Código Gerado Pela Fábrica de Software(Métodos)

        public RegraAtribuicaoCurva ObterRegraVigente(int codigoCurva, int codigoGrupoParametros) 
        {
            IRegraAtribuicaoDAO objRegraAtribuicaoDAO;

            try
            {
                objRegraAtribuicaoDAO = DaoFactory.getRegraAtribuicaoDAO();
                return objRegraAtribuicaoDAO.ObterRegraVigente(codigoCurva, codigoGrupoParametros);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                objRegraAtribuicaoDAO = null;
            }

            return new RegraAtribuicaoCurva();
        }

        public IList<ParametroRegra> ObterParametrizacoesAtribuicaoPorCodigoRegraEDataVigenciaCompleto(int codigoRegraAtribuicao, DateTime dataInicioVigencia)
        {
            IList<ParametroRegra> listaParametroRegra = null;
            IRegraAtribuicaoDAO objRegraAtribuicaoDAO;

            try
            {
                objRegraAtribuicaoDAO = DaoFactory.getRegraAtribuicaoDAO();
                listaParametroRegra = objRegraAtribuicaoDAO.ObterParametrizacoesAtribuicaoPorCodigoRegraEDataVigenciaCompleto(codigoRegraAtribuicao, dataInicioVigencia);
                return listaParametroRegra;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                listaParametroRegra = null;
                objRegraAtribuicaoDAO = null;
            }

            return new List<ParametroRegra>();
        }

        public void AtualizarRegrasAtribuicaoCurva(IList<RegraAtribuicaoCurva> listaRegrasAtribuicaoCurva)
        {

            try
            {
                IRegraAtribuicaoDAO regraAtribuicaoDAO = DaoFactory.getRegraAtribuicaoDAO();
                IProdutoFinanceiroDAO produtoFinanceiroDAO = DaoFactory.getProdutoFinanceiroDAO();

                DateTime dataAtual = System.DateTime.Now;
                foreach (RegraAtribuicaoCurva regraAtribuicaoCurva in listaRegrasAtribuicaoCurva)
                {
                    if (regraAtribuicaoCurva.CodigoProdutoFinanceiroDerivado != 0)
                    {
                        regraAtribuicaoCurva.CodigoProdutoFinanceiroExcecao = regraAtribuicaoCurva.CodigoProdutoFinanceiroDerivado;
                    }
                    
                    if (regraAtribuicaoCurva.CodigoSituacao == 1)
                    {
                        if (regraAtribuicaoCurva.CodigoRegraAtribuicaoCurva != 0)
                        {
                            regraAtribuicaoCurva.DataFimVigencia = System.DateTime.Now;
                            regraAtribuicaoCurva.DataHoraAlteracao = regraAtribuicaoCurva.DataFimVigencia;
                            regraAtribuicaoDAO.AtualizarRegrasAtribuicaoCurva(regraAtribuicaoCurva);

                            regraAtribuicaoCurva.DataInicioVigencia = dataAtual;
                            regraAtribuicaoCurva.DataFimVigencia = System.DateTime.MinValue;
                            regraAtribuicaoCurva.DataHoraCriacao = System.DateTime.Now;
                            regraAtribuicaoCurva.DataHoraAlteracao = regraAtribuicaoCurva.DataHoraCriacao;
                            regraAtribuicaoDAO.CriarRegraAtribuicaoCurvaComCodigoRegra(regraAtribuicaoCurva);
                        }
                        else
                        {
                            regraAtribuicaoCurva.DataInicioVigencia = dataAtual;
                            regraAtribuicaoCurva.DataFimVigencia = System.DateTime.MinValue;
                            regraAtribuicaoCurva.DataHoraCriacao = System.DateTime.Now;
                            regraAtribuicaoCurva.DataHoraAlteracao = regraAtribuicaoCurva.DataHoraCriacao;
                            regraAtribuicaoCurva.CodigoRegraAtribuicaoCurva = regraAtribuicaoDAO.CriarRegraAtribuicaoCurva(regraAtribuicaoCurva);
                        }

                        foreach (ParametrizacaoAtribuicao objParametrizacaoAtribuicao in regraAtribuicaoCurva.ParametrizacaoAtribuicao)
                        {
                            objParametrizacaoAtribuicao.CodigoRegraAtribuicaoCurva = regraAtribuicaoCurva.CodigoRegraAtribuicaoCurva;
                            objParametrizacaoAtribuicao.DataInicioVigenciaParametro = regraAtribuicaoCurva.DataInicioVigencia;
                            regraAtribuicaoDAO.CriarParametrizacaoAtribuicao(objParametrizacaoAtribuicao);
                        }
                    }
                    else
                    {
                        if (regraAtribuicaoCurva.CodigoRegraAtribuicaoCurva != 0)
                        {
                            regraAtribuicaoCurva.DataFimVigencia = System.DateTime.Now;
                            regraAtribuicaoCurva.DataHoraAlteracao = regraAtribuicaoCurva.DataFimVigencia;
                            regraAtribuicaoDAO.AtualizarRegrasAtribuicaoCurva(regraAtribuicaoCurva);
                        }
                    }
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                listaRegrasAtribuicaoCurva = null;
            }
        }

        #endregion

        public IList<RegraAtribuicaoCurva> ObterRegrasAtribuicaoCurvaVigentesPorCodigoGrupo(int codigoGrupo)
        {
            IList<RegraAtribuicaoCurva> listaRegras = null;

            try
            {
                IRegraAtribuicaoDAO regraAtribuicaoDAO = DaoFactory.getRegraAtribuicaoDAO();
                listaRegras = regraAtribuicaoDAO.ObterRegrasAtribuicaoCurvaVigentesPorCodigoGrupo(codigoGrupo);

                foreach (RegraAtribuicaoCurva regraAtribuicaoCurva in listaRegras)
                {
                    IList<ParametrizacaoAtribuicao> listaParametrizacao = regraAtribuicaoDAO.ObterParametrizacoesAtribuicaoPorCodigoRegraEDataVigencia(regraAtribuicaoCurva.CodigoRegraAtribuicaoCurva, regraAtribuicaoCurva.DataInicioVigencia);
                    regraAtribuicaoCurva.listaParametrizacao = listaParametrizacao;
                }

                return listaRegras;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                listaRegras = null;
            }

            return new List<RegraAtribuicaoCurva>();
        }

        public int ObterNumeroRegrasAtribuicaoCurvaVigentesPorCodigoGrupo(int codigoGrupo)
        {
            IRegraAtribuicaoDAO regraAtribuicaoDAO;

            try
            {
                regraAtribuicaoDAO = DaoFactory.getRegraAtribuicaoDAO();
                return regraAtribuicaoDAO.ObterNumeroRegrasAtribuicaoCurvaVigentesPorCodigoGrupo(codigoGrupo);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                regraAtribuicaoDAO = null;
            }

            return 0;
        }

        public int ObterNumeroRegrasAtribuicaoCurvaPorCodigoGrupo(int codigoGrupo)
        {
            IRegraAtribuicaoDAO RegraAtribuicaoDAO;

            try
            {
                RegraAtribuicaoDAO = DaoFactory.getRegraAtribuicaoDAO();
                return RegraAtribuicaoDAO.ObterNumeroRegrasAtribuicaoCurvaPorCodigoGrupo(codigoGrupo);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                RegraAtribuicaoDAO = null;
            }

            return 0;
        }

        public int ObterNumeroRegrasAtribuicaoPorCodigoParametro(int codigoParametro)
        {
            IRegraAtribuicaoDAO RegraAtribuicaoDAO;

            try
            {
                RegraAtribuicaoDAO = DaoFactory.getRegraAtribuicaoDAO();
                return RegraAtribuicaoDAO.ObterNumeroRegrasAtribuicaoPorCodigoParametro(codigoParametro);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                RegraAtribuicaoDAO = null;
            }

            return 0;
        }

        public IList<RegraAtribuicaoCurva> ObterRegrasAtribuicaoCurvaPorCodigoEVigencia(int codigoGrupo, VigenciaRegra vigenciaRegra)
        {
            IList<RegraAtribuicaoCurva> listaRegras = null;
            IRegraAtribuicaoDAO regraAtribuicaoDAO = null;

            try
            {
                regraAtribuicaoDAO = DaoFactory.getRegraAtribuicaoDAO();

                listaRegras = regraAtribuicaoDAO.ObterRegrasAtribuicaoCurvaPorCodigoEVigencia(codigoGrupo, vigenciaRegra.DataInicioVigencia, vigenciaRegra.DataFimVigencia);

                return listaRegras;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                listaRegras = null;
                regraAtribuicaoDAO = null;
            }

            return new List<RegraAtribuicaoCurva>();
        }

        public void CriarRegrasAtribuicaoCurva(IList<RegraAtribuicaoCurva> listaRegrasAtribuicaoCurva)
        {
            IRegraAtribuicaoDAO regraAtribuicaoDAO = null;
            IProdutoFinanceiroDAO produtoFinanceiroDAO = null;

            try
            {
                regraAtribuicaoDAO = DaoFactory.getRegraAtribuicaoDAO();
                produtoFinanceiroDAO = DaoFactory.getProdutoFinanceiroDAO();

                DateTime dataAtual = System.DateTime.Now;
                foreach (RegraAtribuicaoCurva regraAtribuicaoCurva in listaRegrasAtribuicaoCurva)
                {
                    if (regraAtribuicaoCurva.CodigoProdutoFinanceiroDerivado != 0)
                    {
                        regraAtribuicaoCurva.CodigoProdutoFinanceiroExcecao = produtoFinanceiroDAO.ObterProdutoFinanceiroPorProdutoFinanceiroDerivado(regraAtribuicaoCurva.CodigoProdutoFinanceiroDerivado);
                    }

                    regraAtribuicaoCurva.DataInicioVigencia = dataAtual;
                    regraAtribuicaoCurva.DataFimVigencia = System.DateTime.MinValue;
                    regraAtribuicaoCurva.DataHoraCriacao = System.DateTime.Now;
                    regraAtribuicaoCurva.DataHoraAlteracao = regraAtribuicaoCurva.DataHoraCriacao;
                    int codigoRegraAtribuicao = regraAtribuicaoDAO.CriarRegraAtribuicaoCurva(regraAtribuicaoCurva);
                    foreach (ParametrizacaoAtribuicao parametrizacaoAtribuicao in regraAtribuicaoCurva.ParametrizacaoAtribuicao)
                    {
                        parametrizacaoAtribuicao.CodigoRegraAtribuicaoCurva = codigoRegraAtribuicao;
                        parametrizacaoAtribuicao.DataInicioVigenciaParametro = regraAtribuicaoCurva.DataInicioVigencia;
                        regraAtribuicaoDAO.CriarParametrizacaoAtribuicao(parametrizacaoAtribuicao);
                    }
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                regraAtribuicaoDAO = null;
            }
        }
    }
    #endregion
}
#endregion